﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class ccostoporpersonaController : Controller
    {
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        //
        // GET: /ccostoporpersona/
        public ActionResult IndexById(int id)
        {

            var query = entidades.CCOSTOPORPERSONAs
                .Where(ccp => ccp.idccostoporpersona == id);

            var result = (from ccp in query.OrderByDescending(a => a.idejerciciomes).ToList()
                          join cc in entidades.CCOSTOes on ccp.IdCCosto equals cc.IdCCosto
                          join pya in entidades.PROYACTs on cc.IdProyAct equals pya.IdProyAct
                          join pyc in entidades.PROYCOMPs on pya.IdProycomp equals pyc.IdProyComp
                          join cpy in entidades.CONVEPROYs on pyc.IdConvProy equals cpy.IdConvProy
                          join py in entidades.PROYECTOes on cpy.IdProyecto equals py.IdProyecto
                          join eg in entidades.ELEMENTOGASTOes on cc.IdElemGasto equals eg.IdElemGasto
                          join em in entidades.EJERCICIOMES on ccp.idejerciciomes equals em.idejerciciomes
                          join ea in entidades.EJERCICIOs on em.IdEjercicio equals ea.IdEjercicio
                          //join cap in entidades.CONTRATOADENDAPERSONALs on ccp.idcontratoadendapersonal equals cap.idcontratoadendapersonal
                          //join ea in e
                          select new
                          {
                              IdCCostoPorPersona = ccp.idccostoporpersona,
                              IdCCosto = ccp.IdCCosto,
                              porcentaje = ccp.porcentaje,
                              valor = ccp.valor,
                              Estado = ccp.estado,
                              Validado = ccp.validado,
                              idejerciciomes = ccp.idejerciciomes,
                              IdPersonal = ccp.IdPersonal,
                              Idproyecto = py.IdProyecto,
                              Proyecto = py.Nombre,
                              Ccosto = eg.NomElemGasto

                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult Index(int id)
        {

            int start = Convert.ToInt32(Request.QueryString["start"]);
            int limit = Convert.ToInt32(Request.QueryString["limit"]);
            string area = Convert.ToString(Request.QueryString["query"]);
            var query = entidades.CCOSTOPORPERSONAs
                .Where(ccp => ccp.IdPersonal == id);
                /*.Join(entidades.CCOSTOPORPERSONAs, cap => cap.idcontratoadendapersonal, ccp => ccp.idcontratoadendapersonal, (cap, ccp) => new
                {
                    ccp.idccostoporpersona,
                    ccp.IdCCosto,
                    ccp.porcentaje,
                    ccp.valor,
                    ccp.estado,
                    ccp.validado,
                    ccp.idejerciciomes,
                    ccp.idcontratoadendapersonal,
                });*/
            /*if (!String.IsNullOrEmpty(area))
            {
                query = query.Where(a => (a.Nombre).ToUpper().Contains(area.ToUpper()));
            }*/
            var result = (from ccp in query.OrderByDescending(a => a.idejerciciomes).Skip(start).Take(limit).ToList()
                          join cc in entidades.CCOSTOes on ccp.IdCCosto equals cc.IdCCosto
                          join pya in entidades.PROYACTs on cc.IdProyAct equals pya.IdProyAct
                          join pyc in entidades.PROYCOMPs on pya.IdProycomp equals pyc.IdProyComp
                          join cpy in entidades.CONVEPROYs on pyc.IdConvProy equals cpy.IdConvProy
                          join py in entidades.PROYECTOes on cpy.IdProyecto equals py.IdProyecto
                          join eg in entidades.ELEMENTOGASTOes on cc.IdElemGasto equals eg.IdElemGasto
                          join em in entidades.EJERCICIOMES on ccp.idejerciciomes equals em.idejerciciomes
                          join ea in entidades.EJERCICIOs on em.IdEjercicio equals ea.IdEjercicio
                          //join cap in entidades.CONTRATOADENDAPERSONALs on ccp.idcontratoadendapersonal equals cap.idcontratoadendapersonal
                          //join ea in e
                          select new
                          {
                              Id = ccp.idccostoporpersona,
                              Codproyecto = py.Codigo,
                              Proyecto = py.Nombre,
                              Idproyecto = py.IdProyecto,
                              Codigo = cc.Codigo,
                              Ccosto = eg.NomElemGasto,
                              Porcentaje = ccp.porcentaje,
                              Monto = ccp.valor,
                              Estado = ccp.estado,
                              Validado = ccp.validado,
                              Ejerciciomes = em.mes,
                              Mes = "Periodo: "+Convert.ToString(ea.Anio)+" - "+Convert.ToString(em.mes)+
                              " -- Mes: "+ mesencadena(Convert.ToInt32(em.mes)),//+" -- Nro Contrato: "+Convert.ToString(cap.nro),
                              //Contratoadenda = ccp.idcontratoadendapersonal,
                          }).ToList();
            
            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public string mesencadena(int id)
        {
            var mes ="";
            switch (id)
            {
                case 1: mes = "Enero"; break;
                case 2: mes = "Febrero"; break;
                case 3: mes = "Marzo"; break;
                case 4: mes = "Abril"; break;
                case 5: mes = "Mayo"; break;
                case 6: mes = "Junio"; break;
                case 7: mes = "Julio"; break;
                case 8: mes = "Agosto"; break;
                case 9: mes = "Setiembre"; break;
                case 10: mes = "Octubre"; break;
                case 11: mes = "Noviembre"; break;
                case 12: mes = "Diciembre"; break;

            }
            return mes;
        }
        
        //
        // GET: /ccostoporpersona/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /ccostoporpersona/Create

        //public ActionResult Create()
        //{
        //    return View();
        //} 

        //
        // POST: /ccostoporpersona/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection, CCOSTOPORPERSONA CCOSTOPORPERSONA)
        {
            string strResponse = String.Empty;
            try
            {
                //int idpersonal = Convert.ToInt32(Request.Params["IdPersonal"]); 
                // TODO: Add insert logic here  IdPersonal
                var cccpersona = new CCOSTOPORPERSONA();
                if (ModelState.IsValid)
                {
                    TryUpdateModel(cccpersona, collection.ToValueProvider());
                    cccpersona.estado = false;
                    entidades.AddToCCOSTOPORPERSONAs(cccpersona);
                    entidades.SaveChanges();
                    //entidades.Rvalidarcentrodecostouno(cccpersona.IdPersonal);
                    strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                    return Content(strResponse);
                }
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }
        
        //
        // GET: /ccostoporpersona/Edit/5
 
        //public ActionResult Edit(int id)
        //{
        //    var eccpersona = entidades.CCOSTOPORPERSONAs.Single(p => p.idccostoporpersona == id);
        //    return View(eccpersona);
        //}

        //
        // POST: /ccostoporpersona/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection, CCOSTOPORPERSONA CCOSTOPORPERSONA)
        {
            string strResponse = String.Empty;
            var eccpersona = entidades.CCOSTOPORPERSONAs.Single(p => p.idccostoporpersona == id);
            try
            {
                // TODO: Add update logic here
                //int idpersonal = Convert.ToInt32(Request.Params["IdPersonal"]);
                
                if (ModelState.IsValid)
                {
                    TryUpdateModel(eccpersona);
                    entidades.SaveChanges();
                    strResponse = "{success: true,msg:'Registro Creado Correctamente'}";
                    return Content(strResponse);
                }

                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
                //return RedirectToAction("Index");
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }

        //
        // GET: /ccostoporpersona/Delete/5
 
        /*public ActionResult Delete(int id)
        {
            //entidades.del
            return View();
        }*/

        //
        // POST: /ccostoporpersona/Delete/5

        //[HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            var dccpersona = entidades.CCOSTOPORPERSONAs.Single(p => p.idccostoporpersona == id);
            try
            {
                // TODO: Add delete logic here
                if (dccpersona != null)
                {
                    entidades.DeleteObject(dccpersona);
                    entidades.SaveChanges();
                    return Content("OK");
                    //return HttpNotFound();
                }
                return Content("Error");
            }
            catch
            {
                return View();
            }
        }
    }
}
